package swing.swing05.model;

import javax.swing.*;
import java.math.BigDecimal;
import java.math.RoundingMode;

public class NumberListModel extends AbstractListModel<BigDecimal> {

    BigDecimal start;
    BigDecimal end;
    BigDecimal step;

    public NumberListModel(BigDecimal start,BigDecimal end,BigDecimal step){
        this.start=start;
        this.end=end;
        this.step=step;
    }

    // 获取总共有多少列表项
    @Override
    public int getSize(){

        // Math.floor() 向下取整
        // subtract() 减去
        // divide() 除以  scale:2 保留两位小数 RoundingMode.HALF_DOWN 四舍五入

        // doubleValue() 转化成 double值
        int floor=(int)Math.floor(end.subtract(start).divide(step,2, RoundingMode.HALF_DOWN).doubleValue());
        return floor+1;
    }

    // 根据指定的索引获取对应的条目
    @Override
    public BigDecimal getElementAt(int index){
        // 索引乘以步长加start
        // java 中 BigDecimal 详解
        // https://blog.csdn.net/qq_35868412/article/details/89029288
        // setScale() 保留小数
        BigDecimal ele=new BigDecimal(index).multiply(step).add(start).setScale(2,RoundingMode.HALF_DOWN);
        return ele;
    }
}
